home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / PInterfaces / BlockStorage.p < prev    next >
Text File  |  1996-05-01  |  69KB  |  1,870 lines

  1. {
  2.      File:        BlockStorage.p
  3.  
  4.      Contains:    External interfaces to Block Storage Family
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT BlockStorage;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __BLOCKSTORAGE__}
  28. {$SETC __BLOCKSTORAGE__ := 1}
  29.  
  30. {$I+}
  31. {$SETC BlockStorageIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __MATH64__}
  38. {$I Math64.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __ERRORS__}
  41. {$I Errors.p}
  42. {$ENDC}
  43. {$IFC UNDEFINED __NAMEREGISTRY__}
  44. {$I NameRegistry.p}
  45. {$ENDC}
  46. {$IFC UNDEFINED __IOMEMORYLISTS__}
  47. {$I IOMemoryLists.p}
  48. {$ENDC}
  49. {$IFC UNDEFINED __IOITERATOR__}
  50. {$I IOIterator.p}
  51. {$ENDC}
  52.  
  53. {$PUSH}
  54. {$ALIGN POWER}
  55. {$LibExport+}
  56.  
  57. {$IFC FOR_SYSTEM8_PREEMPTIVE }
  58. {
  59. ******************************************************************************
  60.  *******************************************************************************
  61.  *******************************************************************************
  62.  
  63.  Block Storage Constants
  64.     
  65.  *******************************************************************************
  66.  *******************************************************************************
  67.  *****************************************************************************
  68. }
  69. {
  70. ******************************************************************************
  71.     
  72.     Store property names
  73.     
  74.  *****************************************************************************
  75. }
  76. {
  77. ******************************************************************************
  78.     
  79.     Container property names
  80.     
  81.  *****************************************************************************
  82. }
  83. {
  84. ******************************************************************************
  85.  
  86.     StoreOpenOptions is the set of permissions available when making a Connection
  87.     to a Store.  These options can be OR'd together in any combination. 
  88.     
  89.  *****************************************************************************
  90. }
  91.  
  92. CONST
  93.     kBSStoreRead                = $00000001;                    {  Allow reading/positioning  }
  94.     kBSStoreWrite                = $00000002;                    {  Allow writing  }
  95.     kBSStoreExclusiveIO            = $00000004;                    {  Don't allow another IO Connection to be opened  }
  96.     kBSStoreExclusiveCntrl        = $00000008;                    {  Don't allow another control Connection to be opened  }
  97.     kBSStoreResizeOK            = $00000010;                    {  Resizing of the Store is OK (but, of course, notify me)  }
  98.     kBSStoreControl                = $00000020;                    {  Allow me to control the Store  }
  99.  
  100.  
  101. TYPE
  102.     BSStoreOpenOptions                    = UInt32;
  103. {
  104. ******************************************************************************
  105.  
  106.     BSContainerOpenOptions is the set of permissions available when making a 
  107.     Connection to a Container.  These options can be OR'd together in any combination. 
  108.     
  109.  *****************************************************************************
  110. }
  111.  
  112. CONST
  113.     kBSContainerExclusiveCntrl    = $00000001;                    {  Don't allow another Connection to be opened  }
  114.  
  115.  
  116. TYPE
  117.     BSContainerOpenOptions                = UInt32;
  118. {
  119. ****************************************************************************
  120.      
  121.     Accessibility states
  122.  
  123.      Accessibility States indicate how accessible a Block Storage Container or
  124.          Store is.  There are four currently defined.  Their absolute values 
  125.         are unimportant, but have been split across fairly large ranges to 
  126.         allow for future values to be inserted between them.
  127.  
  128.          kBSOnline and kBSOffline represent the two extremes of accessibility -
  129.          nothing can be less accessible than kBSOffline (that is the state you 
  130.         send a Store to when you are about to delete it) and nothing can be 
  131.         more online than kBSOnline, which means you are fully, 100% available.
  132.         
  133.  ***************************************************************************
  134. }
  135.  
  136. CONST
  137.     kBSOnline                    = $0FFFFFFF;
  138.     kBSPowerSave                = $0A000000;
  139.     kBSOutOfDrive                = $01000000;
  140.     kBSOffline                    = 0;
  141.  
  142.  
  143. TYPE
  144.     BSAccessibilityState                = UInt32;
  145. {
  146. ****************************************************************************
  147.     
  148.     Component types
  149.  
  150.  ***************************************************************************
  151. }
  152.  
  153. CONST
  154.     kBSExternalDeviceComponent    = 1;
  155.     kBSStoreComponent            = 2;
  156.  
  157.  
  158. TYPE
  159.     BSComponentType                        = UInt32;
  160. {
  161. ****************************************************************************
  162.  
  163.     Block List Seek specifiers
  164.     
  165.  ***************************************************************************
  166. }
  167.  
  168. CONST
  169.     kBSBlockListSeekByteAbsolute = 1;
  170.     kBSBlockListSeekByteRelative = 2;
  171.     kBSBlockListSeekExtentAbsolute = 3;
  172.     kBSBlockListSeekExtentRelative = 4;
  173.     kBSBlockListSeekBlockAbsolute = 5;
  174.     kBSBlockListSeekBlockRelative = 6;
  175.  
  176.  
  177. TYPE
  178.     BSBlockListWhence                    = UInt32;
  179. {
  180. ****************************************************************************
  181.  
  182.     Selectors for BSStoreGetDeviceData - specifies which set of Stores to
  183.         return
  184.  
  185.  ***************************************************************************
  186. }
  187.  
  188. CONST
  189.     kBSStoreGetLeafStores        = 1;
  190.     kBSStoreGetAllStores        = 2;
  191.     kBSStoreGetPrimaryStores    = 3;
  192.  
  193.  
  194. TYPE
  195.     BSStoreGetSelector                    = UInt32;
  196. {
  197. ****************************************************************************
  198.  
  199.     Format specifiers - these are generic categories.  There may be further
  200.         distinctions within these categories for number of blocks, etc.
  201.     
  202.  ***************************************************************************
  203. }
  204.  
  205. CONST
  206.     kBSFormatFloppyGCR            = 'gcr ';
  207.     kBSFormatFloppyMFM            = 'mfm ';
  208.     kBSFormatSCSI                = 'scsi';
  209.     kBSFormatATA                = 'ata ';
  210.     kBSNotFormatable            = 'none';
  211.  
  212.  
  213. TYPE
  214.     BSStoreFormatType                    = OSType;
  215.  
  216. CONST
  217.     kBSMaxFormats                = 8;
  218.  
  219. {  Maximum number of formats a Mapping plug-in can support  }
  220. {
  221. ****************************************************************************
  222.  *****************************************************************************
  223.  *****************************************************************************
  224.  
  225.     Block Storage Error codes
  226.     
  227.  *****************************************************************************
  228.  *****************************************************************************
  229.  ***************************************************************************
  230. }
  231. {
  232. ****************************************************************************
  233.  
  234.     Basic error types
  235.     
  236.  ***************************************************************************
  237. }
  238.     E_Success                    = $00000000;
  239.     E_LoopTermination            = $08000000;
  240.     E_Underflow                    = $10000000;
  241.     E_Overflow                    = $18000000;
  242.     E_AlreadyExists                = $20000000;
  243.     E_NotFound                    = $28000000;
  244.     E_AccessViolation            = $30000000;
  245.     E_Busy                        = $38000000;
  246.     E_VersionMismatch            = $40000000;
  247.     E_Canceled                    = $48000000;
  248.     E_OutOfResources            = $50000000;
  249.     E_Timeout                    = $58000000;
  250.     E_ParameterError            = $60000000;
  251.     E_Fatal                        = $68000000;
  252.     E_Unknown                    = $F8000000;
  253.  
  254. {
  255. ****************************************************************************
  256.  
  257.     Block Storage Error ID
  258.     
  259.  ***************************************************************************
  260. }
  261.     E_BlockStorageBias            = $04F00000;
  262.  
  263. {
  264. ****************************************************************************
  265.  
  266.     Block Storage Error Categories
  267.     
  268.  ***************************************************************************
  269. }
  270.     E_BSFamilyError                = $04F00000;
  271.     E_BSExpertError                = $04F08000;
  272.     E_BSMappingPlugInError        = $04F10000;
  273.     E_BSPartitioningPlugInError    = $04F18000;
  274.     E_BSContainerPlugInError    = $04F20000;
  275.     E_BSBlockListError            = $04F28000;
  276.     E_BSSuccess                    = $00000000;
  277.  
  278. {
  279. ****************************************************************************
  280.  
  281.     Family Errors
  282.     
  283.  ***************************************************************************
  284. }
  285.     E_BSOutOfResources            = $54F00001;
  286.     E_BSStoreInUse                = $34F00001;
  287.     E_BSStoreWriteProtected        = $34F00002;
  288.     E_BSStoreNotFound            = $2CF00001;
  289.     E_BSBadMessage                = $64F00001;
  290.     E_BSBadConnection            = $64F00002;
  291.     E_BSTableTooSmall            = $64F00003;
  292.     E_BSNullParameters            = $64F00004;
  293.     E_BSParameterError            = $64F00005;
  294.     E_BSUnimplemented            = $44F00001;
  295.  
  296. {
  297. ****************************************************************************
  298.  
  299.     Expert Errors
  300.     
  301.  ***************************************************************************
  302. }
  303.     E_BSEPlugInNotFound            = $2CF08001;
  304.     E_BSENoPlugInMatch            = $2CF08002;
  305.     E_BSENoMoreStores            = $54F08001;
  306.     E_BSEHierarchyTooDeep        = $54F08002;
  307.     E_BSEOutOfResources            = $54F08003;
  308.  
  309. {
  310. ****************************************************************************
  311.  
  312.     Mapping Plug-in Errors
  313.     
  314.  ***************************************************************************
  315. }
  316.     E_BSMPIOutOfStoreBounds        = $64F10001;
  317.     E_BSMPITooManyMappings        = $64F10002;
  318.     E_BSMPIBadMappingParams        = $64F10003;
  319.     E_BSMPIMappingNotSupported    = $64F10004;
  320.     E_BSMPIStateNotSupported    = $64F10005;
  321.     E_BSMPIWriteProtected        = $34F10001;
  322.     E_BSMPICannotGoToState        = $34F10002;
  323.     E_BSMPIUnitNotResponding    = $6CF10001;
  324.     E_BSMPITransferError        = $6CF10002;
  325.     E_BSMPIMemoryAccessFault    = $6CF10003;
  326.     E_BSMPINoPlugIn                = $6CF10004;
  327.     E_BSMPIMediaRemoved            = $6CF10005;
  328.     E_BSMPIOutOfResources        = $54F10001;
  329.  
  330. {
  331. ****************************************************************************
  332.  
  333.     Partitioning Plug-in Errors
  334.     
  335.  ***************************************************************************
  336. }
  337.     E_BSPPIMappingNotSupported    = $64F18001;
  338.     E_BSPPIOverlappingPartition    = $64F18002;
  339.     E_BSPPIOutOfStoreBounds        = $64F18003;
  340.     E_BSPPIPartitionNonExistant    = $64F18004;
  341.     E_BSPPITooManyPartitions    = $64F18005;
  342.     E_BSPPINoPlugIn                = $6CF18001;
  343.     E_BSPPIOutOfResources        = $54F18002;
  344.  
  345. {
  346. ****************************************************************************
  347.  
  348.     Container Plug-in Errors
  349.     
  350.  ***************************************************************************
  351. }
  352. {
  353. ****************************************************************************
  354.  
  355.     Block List Errors
  356.     
  357.  ***************************************************************************
  358. }
  359.     E_BSBLEndOfList                = $14F28001;
  360.     E_BSBLParameterError        = $64F28001;
  361.     E_BSBLBadBlockList            = $64F28002;
  362.     E_BSBLBadBlock                = $64F28003;
  363.     E_BSBLAlreadyFinalized        = $24F28001;
  364.     E_BSBLOutOfResources        = $54F28001;
  365.  
  366. {
  367. ****************************************************************************
  368.  *****************************************************************************
  369.  *****************************************************************************
  370.  
  371.  Block Storage Types and Structures
  372.  
  373.  *****************************************************************************
  374.  *****************************************************************************
  375.  ***************************************************************************
  376. }
  377. {
  378. ****************************************************************************
  379.  
  380.     Store and Container Persistent Identifiers
  381.     
  382.  ***************************************************************************
  383. }
  384.  
  385. TYPE
  386.     BSStoreID                            = PACKED ARRAY [0..11] OF CHAR;
  387.     BSContainerID                        = PACKED ARRAY [0..11] OF CHAR;
  388. {
  389. ****************************************************************************
  390.  
  391.     Connection ID's
  392.     
  393.  ***************************************************************************
  394. }
  395.     BSContainerConnID                    = ObjectID;
  396.     BSStoreConnID                        = ObjectID;
  397. {
  398. ****************************************************************************
  399.  
  400.     Plug-in run-time references.  References the plug-in in general, not
  401.         a specific instance of it
  402.     
  403.  ***************************************************************************
  404. }
  405.     BSMappingPlugInRef = ^LONGINT;
  406.     BSPartitioningPlugInRef = ^LONGINT;
  407.     BSContainerPlugInRef = ^LONGINT;
  408. {
  409. ****************************************************************************
  410.  
  411.     Store and Container Run-Time References
  412.     
  413.  ***************************************************************************
  414. }
  415.     BSStoreRef                            = RegEntryRef;
  416.     BSStoreRefPtr                         = ^BSStoreRef;
  417.     BSContainerRef                        = RegEntryRef;
  418.     BSContainerRefPtr                     = ^BSContainerRef;
  419. {
  420. ****************************************************************************
  421.  
  422.     Store and Container Navigation API types
  423.     
  424.  ***************************************************************************
  425. }
  426.     BSStoreIteratorID                    = ObjectID;
  427.     BSContainerIteratorID                = ObjectID;
  428.     BSStorePropertyInstance                = RegPropertyInstance;
  429.     BSContainerPropertyInstance            = RegPropertyInstance;
  430. {
  431. ****************************************************************************
  432.  
  433.     Device block descriptor types
  434.     
  435.  ***************************************************************************
  436. }
  437.     BSByteCount                            = UInt64;
  438.     BSByteCountPtr                         = ^BSByteCount;
  439.     BSBlockListRef = ^LONGINT;
  440.     BSBlockListDescriptorRef = ^LONGINT;
  441. {
  442. ******************************************************************************
  443.  
  444.     BSBlockListDescriptorInfo - information about a Block List Descriptor
  445.     
  446.  *****************************************************************************
  447. }
  448.     BSBlockListDescriptorInfoPtr = ^BSBlockListDescriptorInfo;
  449.     BSBlockListDescriptorInfo = RECORD
  450.         bias:                    BSByteCount;
  451.         start:                    BSByteCount;
  452.         length:                    UInt32;
  453.         parentDescriptor:        BSBlockListDescriptorRef;
  454.         parentList:                BSBlockListRef;
  455.     END;
  456.  
  457. {
  458. ****************************************************************************
  459.  
  460.     BSStoreFormatInfo
  461.     
  462.  ***************************************************************************
  463. }
  464.     BSFormatIndex                        = ItemCount;
  465.     BSStoreFormatInfoPtr = ^BSStoreFormatInfo;
  466.     BSStoreFormatInfo = RECORD
  467.         formatType:                BSStoreFormatType;
  468.         formatSize:                BSByteCount;
  469.         formatNum:                BSFormatIndex;                            {  Format identifier - specific to Mapping plug-in  }
  470.     END;
  471.  
  472. {
  473. ****************************************************************************
  474.  
  475.     BSStoreInfo is used to return information about a Store
  476.     
  477.  ***************************************************************************
  478. }
  479.     BSStoreInfoPtr = ^BSStoreInfo;
  480.     BSStoreInfo = RECORD
  481.         storeID:                BSStoreID;
  482.         storeSize:                BSByteCount;
  483.         readBlockSize:            BSByteCount;                            {  minimum read size & granularity  }
  484.         writeBlockSize:            BSByteCount;                            {  minimum write size & granularity  }
  485.         container:                BSContainerRef;                            {  the container containing this Store  }
  486.         numChildren:            ItemCount;
  487.         numParents:                ItemCount;
  488.         numPartitions:            ItemCount;                                {  Number of partitions in use  }
  489.         maxPartitions:            ItemCount;                                {  Maximum number of partitions possible  }
  490.         isPartitioned:            BOOLEAN;                                {  True if a partitioning plug-in is associated with this Store  }
  491.         isEjectable:            BOOLEAN;
  492.         isBootDevice:            BOOLEAN;
  493.         isWriteable:            BOOLEAN;
  494.         hasAutoEjectHardware:    BOOLEAN;
  495.         isFormattable:            BOOLEAN;
  496.         isPartitionable:        BOOLEAN;
  497.         isFilesystem:            BOOLEAN;
  498.         mappingPlugIn:            BSMappingPlugInRef;
  499.         partitioningPlugIn:        BSPartitioningPlugInRef;
  500.         curFormat:                BSStoreFormatInfo;
  501.         possibleFormats:        ARRAY [0..7] OF BSStoreFormatInfo;
  502.         name:                    Str255;                                    {  Max name size is 255 (0 terminated)  }
  503.         typeName:                Str32;                                    {  Max type name is 32 (0 terminated)  }
  504.     END;
  505.  
  506. {
  507. ****************************************************************************
  508.  
  509.     BSContainerInfo is used to return information about a Container
  510.     
  511.  ***************************************************************************
  512. }
  513.     BSContainerInfoPtr = ^BSContainerInfo;
  514.     BSContainerInfo = RECORD
  515.         device:                    RegEntryRef;
  516.         numChildren:            ItemCount;
  517.         ejectable:                BOOLEAN;
  518.     END;
  519.  
  520. {
  521. ****************************************************************************
  522.  
  523.     BSPartitionInfo is used to return information about a Partition
  524.     
  525.  ***************************************************************************
  526. }
  527.     BSPartitionDescriptorPtr = ^BSPartitionDescriptor;
  528.     BSPartitionDescriptor = RECORD
  529.         entryNum:                ItemCount;
  530.         start:                    BSByteCount;
  531.         len:                    BSByteCount;
  532.         destStoreID:            BSStoreID;
  533.         isPartitionable:        BOOLEAN;
  534.         isFilesystem:            BOOLEAN;
  535.         reserved1:                BOOLEAN;
  536.         reserved2:                BOOLEAN;
  537.         name:                    Str255;                                    {  Max name size is 255 (0 terminated)  }
  538.         typeName:                Str32;                                    {  Max type name is 32 (0 terminated)  }
  539.     END;
  540.  
  541. {
  542. ****************************************************************************
  543.  
  544.     BSStoreComponent describes a component of a Store.  A component may
  545.     be an external device or another Store.  
  546.     
  547.  ***************************************************************************
  548. }
  549.     BSStoreComponentPtr = ^BSStoreComponent;
  550.     BSStoreComponent = RECORD
  551.         componentType:            BSComponentType;
  552.         startingOffset:            BSByteCount;                            {  Where in the Store this  }
  553.                                                                         {  component will be placed  }
  554.         sourceNode:                RegEntryRef;                            {  Physical components  }
  555.         srcStore:                BSStoreRef;                                {  Logical components  }
  556.         partitionInfo:            BSPartitionDescriptor;                    {  Logical components  }
  557.     END;
  558.  
  559. {
  560. ****************************************************************************
  561.  
  562.  ***************************************************************************
  563. }
  564.     BSStoreIOIteratorDataPtr = ^BSStoreIOIteratorData;
  565.     BSStoreIOIteratorData = RECORD
  566.         IOCI:                    IOCommonInfo;
  567.         info:                    BSStoreInfo;
  568.     END;
  569.  
  570. {
  571. ****************************************************************************
  572.  *****************************************************************************
  573.  *****************************************************************************
  574.  
  575.     Block Storage API Functions
  576.     
  577.     These functions make up the Block Storage API.  All functions are callable
  578.     from the user or privileged bands.  The API is split into the following
  579.     sections:
  580.     
  581.         Navigation - operations to find a Store or Container and its 
  582.             relationship to other Stores and Containers
  583.             
  584.         Connections - operations to open and close connections with Stores and
  585.             Containers
  586.             
  587.         Block Lists - operations to create and manipulate Block Lists, used
  588.             as inputs for I/O operations
  589.             
  590.         I/O - operations to read and write date to Stores
  591.         
  592.         Accessibility - operations to change the accessibility of Store and
  593.             Containers.  Power-down and eject are handled via this interface
  594.             
  595.         Configuration - operations to add new devices, replace plug-ins,
  596.             format and partition Stores and modify the relationships of 
  597.             Stores and Containers to each other.
  598.     
  599.  *****************************************************************************
  600.  *****************************************************************************
  601.  ***************************************************************************
  602. }
  603. {
  604. ****************************************************************************
  605.  *****************************************************************************
  606.  
  607.     Block Storage Navigation API
  608.     
  609.  *****************************************************************************
  610.  ***************************************************************************
  611. }
  612. {
  613. ******************************************************************************
  614.     
  615.     BSStoreGetDeviceData - a simple iteration model to retrieve all of the
  616.         Stores, the leaf Stores or the primary Stores.
  617.     
  618.     Inputs:        selector - which set of Stores to retrieve
  619.                     kBSStoreGetLeafStores retrieves leaf stores
  620.                     kBSStoreGetAllStores retrieves all stores
  621.                     kBSStoreGetPrimaryStores retrieves only primary stores
  622.                 requestItemCount - the size of the buffer
  623.     
  624.     Outputs:    iteratorData - the array of BSStoreIOIteratorData structures
  625.                     to be filled in
  626.                 totalItemCount - the actual number of items available (may be
  627.                     more than requestItemCount, though only requestItemCount
  628.                     structures will be filled in in iteratorData)
  629.     
  630.     Returns:    E_BSSuccess if successful
  631.                 
  632.     
  633.  *****************************************************************************
  634. }
  635. FUNCTION BSStoreGetDeviceData(selector: BSStoreGetSelector; requestItemCount: ItemCount; VAR totalItemCount: ItemCount; VAR iteratorData: BSStoreIOIteratorData): OSStatus; C;
  636. {
  637. ******************************************************************************
  638.     
  639.     BSStoreIteratorCreate - Creates an iterator for Block Storage Stores which
  640.         will be initially placed on startingStore.  If starting Store is NULL
  641.         the iterator will be placed "in the soup" at the root of the Store
  642.         hierarchy
  643.  
  644.     Inputs:        startingStore - the Store to begin at
  645.     
  646.     Outputs:    newIterator - the returned iterator
  647.     
  648.     Returns:    E_BSSuccess if successful
  649.                 
  650.     
  651.  *****************************************************************************
  652. }
  653. FUNCTION BSStoreIteratorCreate(VAR startingStore: BSStoreRef; VAR newIterator: BSStoreIteratorID): OSStatus; C;
  654. {
  655. ******************************************************************************
  656.     
  657.     BSStoreIteratorDispose - disposes of an iterator, freeing all resources
  658.         associated with it
  659.     
  660.     Inputs:        disposeIterator - the iterator to dispose
  661.     
  662.     Outputs:    <none>
  663.     
  664.     Returns:    E_BSSuccess if successful
  665.     
  666.  *****************************************************************************
  667. }
  668. FUNCTION BSStoreIteratorDispose(disposeIterator: BSStoreIteratorID): OSStatus; C;
  669. {
  670. ******************************************************************************
  671.     
  672.     BSStoreIteratorEnter - Moves the iterator into the child the iterator is
  673.         currently on, placing it on the first child
  674.     
  675.     Inputs:        iterator - the iterator to move
  676.     
  677.     Outputs:    newStore - the Store we've just exited
  678.     
  679.     Returns:    E_BSSuccessful
  680.     
  681.  *****************************************************************************
  682. }
  683. FUNCTION BSStoreIteratorEnter(iterator: BSStoreIteratorID; VAR newStore: BSStoreRef): OSStatus; C;
  684. {
  685. ******************************************************************************
  686.     
  687.     BSStoreIteratorExit - Moves the iterator into the parent the iterator is
  688.         currently on, placing the iterator on the Store it exited.
  689.     
  690.     Inputs:        iterator - the iterator to move
  691.     
  692.     Outputs:    newStore - the Store we've been placed on
  693.     
  694.     Returns:    E_BSSuccess if successful
  695.     
  696.  *****************************************************************************
  697. }
  698. FUNCTION BSStoreIteratorExit(iterator: BSStoreIteratorID; VAR newStore: BSStoreRef): OSStatus; C;
  699. {
  700. ******************************************************************************
  701.     
  702.     BSStoreIteratorRestartChildren - Places the iterator on the first child
  703.         in the current Store
  704.     
  705.     Inputs:        iterator - the iterator to restart
  706.     
  707.     Outputs:    newChild - the child we've been placed on
  708.     
  709.     Returns:    E_BSSuccess if succesful
  710.     
  711.  *****************************************************************************
  712. }
  713. FUNCTION BSStoreIteratorRestartChildren(iterator: BSStoreIteratorID; VAR newChild: BSStoreRef): OSStatus; C;
  714. {
  715. ******************************************************************************
  716.     
  717.     BSStoreIteratorRestartParent - Places the iterator on the first parent
  718.         in the current Store
  719.     
  720.     Inputs:        iterator - the iterator to restart
  721.     
  722.     Outputs:    newParent - the parent we've been placed on
  723.     
  724.     Returns:    E_BSSuccess if succesful
  725.     
  726.  *****************************************************************************
  727. }
  728. FUNCTION BSStoreIteratorRestartParent(iterator: BSStoreIteratorID; VAR newParent: BSStoreRef): OSStatus; C;
  729. {
  730. ******************************************************************************
  731.     
  732.     BSStoreIteratorNextChild - Moves the iterator to the next child
  733.     
  734.     Inputs:        iterator - the iterator to move
  735.     
  736.     Outputs:    newChild - the child we've been placed on
  737.                 changed - true if a parent or child has been added or deleted
  738.                         to this Store since the last BSStoreIteratorNextChild or 
  739.                         BSStoreIteratorNextParent call
  740.     
  741.     Returns:    E_BSSuccess if successful
  742.     
  743.  *****************************************************************************
  744. }
  745. FUNCTION BSStoreIteratorNextChild(iterator: BSStoreIteratorID; VAR newChild: BSStoreRef; VAR changed: BOOLEAN): OSStatus; C;
  746. {
  747. ******************************************************************************
  748.     
  749.     BSStoreIteratorNextParent - Moves the iterator to the next parent
  750.     
  751.     Inputs:        iterator - iterator to move
  752.                     changed - true if a parent or child has been added or deleted
  753.                         since the last BSStoreIteratorNextChild or 
  754.                         BSStoreIteratorNextParent call
  755.                         
  756.     Outputs:    newParent - the parent we've been placed on
  757.     
  758.     Returns:    E_BSSuccess if successful
  759.     
  760.  *****************************************************************************
  761. }
  762. FUNCTION BSStoreIteratorNextParent(iterator: BSStoreIteratorID; VAR newParent: BSStoreRef; VAR changed: BOOLEAN): OSStatus; C;
  763. {
  764. ******************************************************************************
  765.     
  766.     BSContainerIteratorCreate - Creates an iterator for Block Storage Containers
  767.         which will be initially placed on startingContainer.  If starting 
  768.         Container is NULL the iterator will be placed "in the soup" at the root 
  769.         of the Container hierarchy.
  770.     
  771.     Inputs:        startingContainer - the container to start at or NULL to start
  772.                     at the root of the Container hierarchy
  773.     
  774.     Outputs:    newIterator - the created iterator
  775.     
  776.     Returns:    E_BSSuccess if successful
  777.     
  778.  *****************************************************************************
  779. }
  780. FUNCTION BSContainerIteratorCreate(VAR startingContainer: BSContainerRef; VAR newIterator: BSContainerIteratorID): OSStatus; C;
  781. {
  782. ******************************************************************************
  783.     
  784.     BSContainerIteratorDispose - disposes of an iterator, freeing all resources
  785.         associated with it
  786.     
  787.     Inputs:        disposeIterator - the iterator to dispose
  788.     
  789.     Outputs:    <none>
  790.     
  791.     Returns:    E_BSSuccess if successful
  792.     
  793.  *****************************************************************************
  794. }
  795. FUNCTION BSContainerIteratorDispose(disposeIterator: BSContainerIteratorID): OSStatus; C;
  796. {
  797. ******************************************************************************
  798.     
  799.     BSContainerIteratorEnter - Moves the iterator into the child the iterator is
  800.         currently on, placing it on the first child
  801.     
  802.     Inputs:        iterator - the iterator to move
  803.     
  804.     Outputs:    newContainer - the Container we've been placed on
  805.     
  806.     Returns:    E_BSSuccess if successful
  807.     
  808.  *****************************************************************************
  809. }
  810. FUNCTION BSContainerIteratorEnter(iterator: BSContainerIteratorID; VAR newContainer: BSContainerRef): OSStatus; C;
  811. {
  812. ******************************************************************************
  813.     
  814.     BSContainerIteratorExit - exits to the parent of the current Container,
  815.         placing the iterator on the Container it exited.  (Containers may have
  816.         only one parent)
  817.     
  818.     Inputs:        iterator - the iterator to move
  819.     
  820.     Outputs:    newContainer - the Container we've just exited
  821.     
  822.     Returns:    E_BSSuccess if successful
  823.     
  824.  *****************************************************************************
  825. }
  826. FUNCTION BSContainerIteratorExit(iterator: BSContainerIteratorID; VAR newContainer: BSContainerRef): OSStatus; C;
  827. {
  828. ******************************************************************************
  829.     
  830.     BSContainerIteratorRestartChildren - Places the iterator on the first child 
  831.         in the current Container
  832.     
  833.     Inputs:        iterator - the iterator to restart
  834.     
  835.     Outputs:    newChild - the child we've been placed on
  836.     
  837.     Returns:    E_BSSuccess if succesful    
  838.     
  839.  *****************************************************************************
  840. }
  841. FUNCTION BSContainerIteratorRestartChildren(iterator: BSContainerIteratorID; VAR newChild: BSContainerRef): OSStatus; C;
  842. {
  843. ******************************************************************************
  844.     
  845.     BSContainerIteratorNextChild - Moves the iterator to the next child
  846.     
  847.     Inputs:        iterator - the iterator to move
  848.     
  849.     Outputs:    newChild - the child we've been placed on
  850.                 changed - true if a child has been added or deleted to this 
  851.                 Container since the last BSContainerIteratorNextChild.
  852.     
  853.     Returns:    E_BSSuccess if successful    
  854.     
  855.  *****************************************************************************
  856. }
  857. FUNCTION BSContainerIteratorNextChild(iterator: BSContainerIteratorID; VAR newChild: BSContainerRef): OSStatus; C;
  858. {
  859. ******************************************************************************
  860.     
  861.     BSStoreFindByID - finds a Store by its identifier and returns a ref
  862.     
  863.     Inputs:        storeID - the Store ID to find
  864.     
  865.     Outputs:    foundStore - the found reference
  866.     
  867.     Returns:    E_BSSuccess if successful
  868.     
  869.  *****************************************************************************
  870. }
  871. FUNCTION BSStoreFindByID(VAR storeID: BSStoreID; VAR foundStore: BSStoreRef): OSStatus; C;
  872. {
  873. ******************************************************************************
  874.     
  875.     BSStoreGetPropertySize - retrieves the size of the named property from the 
  876.                 Store.
  877.     
  878.     Inputs:        store - the Store to retrieve the property from
  879.                 propertyName - the name of the property to retrieve the size of
  880.                 propertyInstance - the instance of the property within this Store
  881.     
  882.     Outputs:    propertySize - filled in with the size of the property
  883.     
  884.     Returns:    E_BSSuccess if successful
  885.     
  886.  *****************************************************************************
  887. }
  888. FUNCTION BSStoreGetPropertySize(VAR store: BSStoreRef; propertyName: CStringPtr; propertyInstance: BSStorePropertyInstance; VAR propertySize: ByteCount): OSStatus; C;
  889. {
  890. ******************************************************************************
  891.     
  892.     BSStoreGetProperty - retrieves the named property from the Store.
  893.     
  894.     Inputs:        store - the Store to retrieve the property from
  895.                 propertyName - the name of the property to retrieve the size of
  896.                 propertyInstance - the instance of the property within this Store
  897.                 propertySize - the size of the buffer passed in (on input)
  898.                 
  899.     Outputs:    propertyValue - a pointer to the buffer to be filled in
  900.                 propertySize - the size filled in (on exit)
  901.     
  902.     Returns:    E_BSSuccess if successful
  903.     
  904.  *****************************************************************************
  905. }
  906. FUNCTION BSStoreGetProperty(VAR store: BSStoreRef; propertyName: CStringPtr; propertyInstance: BSStorePropertyInstance; propertyValue: UNIV Ptr; VAR propertySize: ByteCount): OSStatus; C;
  907. {
  908. ******************************************************************************
  909.     
  910.     BSContainerGetPropertySize - retrieves the size of the named property from 
  911.                 the Container.
  912.     
  913.     Inputs:        container - the Container to retrieve the property from
  914.                 propertyName - the name of the property to retrieve the size of
  915.                 propertyInstance - the instance of the property within this Store
  916.     
  917.     Outputs:    propertySize - filled in with the size of the property
  918.     
  919.     Returns:    E_BSSuccess if successful
  920.     
  921.  *****************************************************************************
  922. }
  923. FUNCTION BSContainerGetPropertySize(VAR container: BSContainerRef; propertyName: CStringPtr; propertyInstance: BSContainerPropertyInstance; VAR propertySize: ByteCount): OSStatus; C;
  924. {
  925. ******************************************************************************
  926.     
  927.     BSContainerGetProperty - retrieves the named property from the Container.
  928.     
  929.     Inputs:        container - the Container to retrieve the property from
  930.                 propertyName - the name of the property to retrieve the size of
  931.                 propertyInstance - the instance of the property within this 
  932.                     Container
  933.                 propertySize - the size of the buffer passed in (on input)
  934.                 
  935.     Outputs:    propertyValue - a pointer to the buffer to be filled in
  936.                 propertySize - the size filled in (on exit)
  937.     
  938.     Returns:    E_BSSuccess if successful
  939.  
  940.  *****************************************************************************
  941. }
  942. FUNCTION BSContainerGetProperty(VAR container: BSContainerRef; propertyName: CStringPtr; propertyInstance: BSContainerPropertyInstance; VAR propertySize: ByteCount): OSStatus; C;
  943. {
  944. ****************************************************************************
  945.  *****************************************************************************
  946.  
  947.     Block Storage Connection Operations
  948.     
  949.  *****************************************************************************
  950.  ***************************************************************************
  951. }
  952. {
  953. ******************************************************************************
  954.  
  955.     BSStoreOpen - Opens a Connection to a Store
  956.  
  957.     Inputs:        store    - the Store to be opened
  958.                 options    - options to the connection
  959.  
  960.     Outputs:     newConnection    - the created connection if successful
  961.  
  962.     Returns:    E_BSSuccess on success
  963.                 E_BSOutOfResources if resources for the connection cannot be allocated
  964.                 E_BSStoreInUse if the Store has an exclusive connection or if an
  965.                     exclusive connection was requested to a Store with any connections
  966.                     open.
  967.                 E_BSStoreWriteProtected if Write access was requested to a read only
  968.                     Store
  969.                 E_BSStoreNotFound if store did not match any existing Stores
  970.  
  971.  *****************************************************************************
  972. }
  973. FUNCTION BSStoreOpen(VAR store: BSStoreRef; options: BSStoreOpenOptions; VAR newConnection: BSStoreConnID): OSStatus; C;
  974. {
  975. ******************************************************************************
  976.  
  977.     BSStoreConnClose - closes a Connection to a Store
  978.  
  979.     Inputs:        connection - the connection to be closed
  980.  
  981.     Outputs:    <none>
  982.  
  983.     Returns:    E_BSSuccess if successful
  984.                 E_BSBadConnection if the connection ID has problems
  985.  
  986.  *****************************************************************************
  987. }
  988. FUNCTION BSStoreConnClose(connection: BSStoreConnID): OSStatus; C;
  989. {
  990. ******************************************************************************
  991.  
  992.     BSContainerOpen - Opens a Connection to a Container
  993.  
  994.     Inputs:        container    - the Container to be opened
  995.                 options    - options to the connection
  996.  
  997.     Outputs:     newConnection    - the created connection if successful
  998.  
  999.     Returns:    E_BSSuccess on success
  1000.                 E_BSOutOfResources if resources for the connection cannot be allocated
  1001.                 E_BSContainerInUse if the Container has an exclusive connection or if an
  1002.                     exclusive connection was requested to a Container with any connections
  1003.                     open.
  1004.                 E_BSContainerNotFound if container did not match any existing Containers
  1005.  
  1006.  *****************************************************************************
  1007. }
  1008. FUNCTION BSContainerOpen(VAR container: BSContainerRef; options: BSContainerOpenOptions; VAR newConnection: BSContainerConnID): OSStatus; C;
  1009. {
  1010. ******************************************************************************
  1011.  
  1012.     BSContainerConnClose - closes a Connection to a Container
  1013.  
  1014.     Inputs:        connection - the connection to be closed
  1015.  
  1016.     Outputs:    <none>
  1017.  
  1018.     Returns:    E_BSSuccess if successful
  1019.                 E_BSBadConnection if the connection ID has problems
  1020.  
  1021.  *****************************************************************************
  1022. }
  1023. FUNCTION BSContainerConnClose(connection: BSContainerConnID): OSStatus; C;
  1024. {
  1025. ****************************************************************************
  1026.  *****************************************************************************
  1027.  
  1028.     Block Storage Block List Operations
  1029.     
  1030.  *****************************************************************************
  1031.  ***************************************************************************
  1032. }
  1033. {
  1034. ******************************************************************************
  1035.     
  1036.     BSBlockListCreate - Creates a block list for use with Block Storage
  1037.     
  1038.     Inputs:        numAnticipatedRange - the number of ranges expected
  1039.     
  1040.     Outputs:    newList - the new list to which ranges may be added
  1041.     
  1042.     Returns:    E_BSSuccess if successful
  1043.     
  1044.  *****************************************************************************
  1045. }
  1046. FUNCTION BSBlockListCreate(numAnticipatedRanges: ItemCount; VAR newList: BSBlockListRef): OSStatus; C;
  1047. {
  1048. ******************************************************************************
  1049.     
  1050.     BSBlockListAddRange - Appends a new range to an existing block list
  1051.     
  1052.     Inputs:        appendList - the list to add the new range to
  1053.                 startingOffset - the offset, in bytes on the device of the
  1054.                     start of the range
  1055.                 length - the length, in bytes, of the range
  1056.     
  1057.     Outputs:    <none>
  1058.     
  1059.     Returns:    E_BSSuccess if successful
  1060.     
  1061.  *****************************************************************************
  1062. }
  1063. FUNCTION BSBlockListAddRange(appendList: BSBlockListRef; startingOffset: BSByteCount; length: ByteCount): OSStatus; C;
  1064. {
  1065. ******************************************************************************
  1066.     
  1067.     BSBlockListFinalize - creates a descriptor to be used in a Block Storage
  1068.         read or write call from the memory list.  After this call has been made
  1069.         no more ranges may be added to the list.
  1070.     
  1071.     Inputs:        finalizeList - the list to be finalized
  1072.     
  1073.     Outputs:    newDescriptor - the descriptor, to be used in a read/write call
  1074.     
  1075.     Returns:    E_BSSuccess if successful
  1076.     
  1077.  *****************************************************************************
  1078. }
  1079. FUNCTION BSBlockListFinalize(finalizeList: BSBlockListRef; VAR newDescriptor: BSBlockListDescriptorRef): OSStatus; C;
  1080. {
  1081. ******************************************************************************
  1082.  
  1083.     BSBlockListDelete - Removes a Block List.  All resources
  1084.         associated with this Block List are relinquished.  This includes memory
  1085.         which was prepared for any of its descriptors.  All descriptors are
  1086.         invalidated.  This call should only be used to clean-up Block Lists
  1087.         in an abort condition.  In normal usage, use BSBlockListDescriptorDelete
  1088.         to remove all descriptors and free the Block List.
  1089.  
  1090.     Inputs:        deleteList - the descriptor to delete
  1091.  
  1092.     Outputs:    <none>
  1093.  
  1094.     Returns:    E_BSSuccess if successful
  1095.  
  1096.  *****************************************************************************
  1097. }
  1098. FUNCTION BSBlockListDelete(deleteList: BSBlockListRef): OSStatus; C;
  1099. {
  1100. ******************************************************************************
  1101.  
  1102.     BSBlockListDescriptorDelete - Removes a Block List Descriptor.  All resources
  1103.         associated with this descriptor are relinquished.  This includes memory
  1104.         which was prepared for this descriptor.  If this was the last descriptor
  1105.         for a BlockList the BlockList is free'd also.
  1106.  
  1107.     Inputs:        deleteDescriptor - the descriptor to delete
  1108.  
  1109.     Outputs:    <none>
  1110.  
  1111.     Returns:    E_BSSuccess if successful
  1112.  
  1113.  *****************************************************************************
  1114. }
  1115. FUNCTION BSBlockListDescriptorDelete(deleteDescriptor: BSBlockListDescriptorRef): OSStatus; C;
  1116. {
  1117. ******************************************************************************
  1118.  
  1119.     BSBlockListDescriptorSeek - Changes the offset within the Block List descriptor
  1120.  
  1121.     Inputs:        seekDescriptor - the descriptor to seek within
  1122.                 whence - how to seek
  1123.                 offset - where to seek
  1124.  
  1125.     Outputs:    newOffset - what the current offset is now
  1126.  
  1127.     Returns:    E_BSSuccess if successful
  1128.  
  1129.  *****************************************************************************
  1130. }
  1131. FUNCTION BSBlockListDescriptorSeek(seekDescriptor: BSBlockListDescriptorRef; whence: BSBlockListWhence; offset: SInt64; VAR newOffset: BSByteCount): OSStatus; C;
  1132. {
  1133. ******************************************************************************
  1134.  
  1135.     BSBlockListGetExtent - Gets an extent at the current offset for up to the
  1136.         specified length
  1137.  
  1138.     Inputs:        srcDesriptor - the descriptor to get the extent from
  1139.                 requestedLen - how long an extent to try to get
  1140.  
  1141.     Outputs:    startingByte - the starting byte address in the device of the
  1142.                     extent
  1143.                 extentLen - how long an extent within the descriptor was found
  1144.  
  1145.     Returns:    E_BSSuccess if successful
  1146.  
  1147.  *****************************************************************************
  1148. }
  1149. FUNCTION BSBlockListDescriptorGetExtent(srcDescriptor: BSBlockListDescriptorRef; requestedLen: ByteCount; VAR startingByte: BSByteCount; VAR extentLen: ByteCount): OSStatus; C;
  1150. {
  1151. ******************************************************************************
  1152.  
  1153.     BSBlockListAddSimpleDescriptor - adds a new descriptor to a block list.  The
  1154.         new descriptor begins at the current offset of the srcDescriptor.  The
  1155.         offset of the srcDescriptor is updated to point at the first byte after
  1156.         the end of the new descriptor.
  1157.  
  1158.     Inputs:        srcDescriptor - the descriptor to base the new descriptor upon
  1159.                 length - how much the new descriptor should cover
  1160.                 bias - the bias offset to be applied to the block address of
  1161.                     srcDescriptor.  When addresses are retrieve from newDescriptor
  1162.                     bias will be added.
  1163.  
  1164.     Outputs:    newDescriptor - the new descriptor
  1165.  
  1166.     Returns:    E_BSSucess if successful
  1167.  
  1168.  *****************************************************************************
  1169. }
  1170. FUNCTION BSBlockListAddSimpleDescriptor(srcDescriptor: BSBlockListDescriptorRef; length: BSByteCount; bias: BSByteCount; VAR newDescriptor: BSBlockListDescriptorRef): OSStatus; C;
  1171. {
  1172. ******************************************************************************
  1173.  
  1174.     BSBlockListDescriptorGetInfo - returns information about the specified
  1175.                 descriptor
  1176.  
  1177.     Inputs:        infoDescriptor - the descriptor to get information about
  1178.  
  1179.     Outputs:    info - the information
  1180.  
  1181.     Returns:    E_BSSuccess if successful
  1182.  
  1183.  *****************************************************************************
  1184. }
  1185. FUNCTION BSBlockListDescriptorGetInfo(infoDescriptor: BSBlockListDescriptorRef; VAR info: BSBlockListDescriptorInfo): OSStatus; C;
  1186. {
  1187. ******************************************************************************
  1188.  
  1189.     BSBlockListDescriptorCheckBlockSizes - checks the extents specified by the
  1190.         descriptor and ensures that all start at 0 mod blockSize and are 
  1191.         0 mod blockSize in length.   
  1192.  
  1193.     Inputs:        checkDescriptor - the descriptor to check
  1194.                 blockSize - the block size to check for
  1195.                 
  1196.     Outputs:    <none>
  1197.  
  1198.     Returns:    E_BSSuccess if successful
  1199.                 E_BSBlockListBadBlockSize if any extents are mis-aligned
  1200.  
  1201.  *****************************************************************************
  1202. }
  1203. FUNCTION BSBlockListDescriptorCheckBlockSizes(checkDescriptor: BSBlockListDescriptorRef; blockSize: UInt32): OSStatus; C;
  1204. {
  1205. ******************************************************************************
  1206.  
  1207.     BSBlockListDescriptorCheckBounds - checks the extents specified by the
  1208.         descriptor and ensures that none specify addresses beyond bound
  1209.  
  1210.     Inputs:        checkDescriptor - the descriptor to check
  1211.                 bound - the highest allowable address
  1212.                 
  1213.     Outputs:    <none>
  1214.  
  1215.     Returns:    E_BSSuccess if successful
  1216.                 E_BSBlockListBadBlockSize if any extents are mis-aligned
  1217.  
  1218.  *****************************************************************************
  1219. }
  1220. FUNCTION BSBlockListDescriptorCheckBounds(checkDescriptor: BSBlockListDescriptorRef; bound: BSByteCount): OSStatus; C;
  1221. {
  1222. ****************************************************************************
  1223.  *****************************************************************************
  1224.  
  1225.     Block Storage I/O Operations
  1226.     
  1227.  *****************************************************************************
  1228.  ***************************************************************************
  1229. }
  1230. {
  1231. ******************************************************************************
  1232.  
  1233.     BSStoreConnRead - reads data from the Store indicated by the Connection.
  1234.         This is the simple version of the call, taking only a single range
  1235.  
  1236.     Inputs:        readConnection - the connection to the Store to be read from
  1237.                 startingOffset - the 64-bit offset into the device to start the
  1238.                         read at
  1239.                 bytesToRead - the 32-bit, unsigned, number of bytes to read
  1240.                 
  1241.     Outputs:    buffer - filled in with the bytes read
  1242.  
  1243.     Returns:    E_BSSuccess if successful
  1244.                 E_BSBadConnection if the connection ID has problems
  1245.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1246.                     the Store
  1247.                 E_BSMPIUnitNotResponding if the device does not respond
  1248.                 E_BSMPITransferError if some error was detected during the transfer
  1249.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1250.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1251.                     not be allocated
  1252.                 E_BSMPIMediaRemoved if the media was removed
  1253.  
  1254.  *****************************************************************************
  1255. }
  1256. FUNCTION BSStoreConnRead(readConnection: BSStoreConnID; startingOffset: BSByteCount; bytesToRead: ByteCount; buffer: UNIV Ptr): OSStatus; C;
  1257. {
  1258. ******************************************************************************
  1259.  
  1260.     BSStoreConnWrite - writes data to the Store a Connection indicates.  This is
  1261.         the simple version of the call taking only a single range.
  1262.  
  1263.     Inputs:        writeConnection - the connection to the Store to be read from
  1264.                 srcMem - where the data is to be taken from
  1265.                 destBlocks - the blocks on the Store where the data is to be placed
  1266.  
  1267.     Outputs:    <none>
  1268.  
  1269.     Returns:    E_BSSuccess if successful
  1270.             E_BSBadConnection if the connection ID has problems
  1271.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1272.                 the Store
  1273.             E_BSMPIUnitNotResponding if the device does not respond
  1274.             E_BSMPITransferError if some error was detected during the transfer
  1275.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1276.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1277.                 not be allocated
  1278.             E_BSMPIMediaRemoved if the media was removed
  1279.  
  1280.  *****************************************************************************
  1281. }
  1282. FUNCTION BSStoreConnWrite(writeConnection: BSStoreConnID; startingOffset: BSByteCount; bytesToWrite: ByteCount; buffer: UNIV Ptr): OSStatus; C;
  1283. {
  1284. ******************************************************************************
  1285.  
  1286.     BSStoreConnReadSG - reads data from the Store indicated by the Connection.
  1287.         This is the scatter/gather version of the call.  The Block List is
  1288.         generated by the calls above, the Memory List calls can be found in
  1289.         <MemoryLists.h>.
  1290.  
  1291.     Inputs:        readConnection - the connection to the Store to be read from
  1292.                 srcBlocks - a descriptor indicating the ranges on the device
  1293.                     to be read
  1294.                 destMemory - a Memory List descriptor indicating where the
  1295.                     data is to be placed
  1296.                     
  1297.     Outputs:    <none>
  1298.  
  1299.     Returns:    E_BSSuccess if successful
  1300.                 E_BSBadConnection if the connection ID has problems
  1301.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1302.                     the Store
  1303.                 E_BSMPIUnitNotResponding if the device does not respond
  1304.                 E_BSMPITransferError if some error was detected during the transfer
  1305.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1306.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1307.                     not be allocated
  1308.                 E_BSMPIMediaRemoved if the media was removed
  1309.  
  1310.  *****************************************************************************
  1311. }
  1312. FUNCTION BSStoreConnReadSG(readConnection: BSStoreConnID; srcBlocks: BSBlockListDescriptorRef; destMemory: MemListDescriptorRef): OSStatus; C;
  1313. {
  1314. ******************************************************************************
  1315.  
  1316.     BSStoreConnWriteSG - writes data to the Store a Connection indicates.  This 
  1317.         is the scatter/gather version of the call.  The Block List is
  1318.         generated by the calls above, the Memory List calls can be found in
  1319.         <MemoryLists.h>.
  1320.  
  1321.     Inputs:        writeConnection - the connection to the Store to be read from
  1322.                 srcMem - where the data is to be taken from
  1323.                 destBlocks - the blocks on the Store where the data is to be placed
  1324.  
  1325.     Outputs:    <none>
  1326.  
  1327.     Returns:    E_BSSuccess if successful
  1328.             E_BSBadConnection if the connection ID has problems
  1329.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1330.                 the Store
  1331.             E_BSMPIUnitNotResponding if the device does not respond
  1332.             E_BSMPITransferError if some error was detected during the transfer
  1333.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1334.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1335.                 not be allocated
  1336.             E_BSMPIMediaRemoved if the media was removed
  1337.  
  1338.  *****************************************************************************
  1339. }
  1340. FUNCTION BSStoreConnWriteSG(writeConnection: BSStoreConnID; srcMemory: MemListDescriptorRef; destBlocks: BSBlockListDescriptorRef): OSStatus; C;
  1341. {
  1342. ******************************************************************************
  1343.  
  1344.     BSStoreConnReadAsync - reads data from the Store indicated by the Connection.
  1345.         This is the asynchronous version of the simple call, taking only a 
  1346.         single range.
  1347.  
  1348.     Inputs:        readConnection - the connection to the Store to be read from
  1349.                 startingOffset - the 64-bit offset into the device to start the
  1350.                         read at
  1351.                 bytesToRead - the 32-bit, unsigned, number of bytes to read
  1352.                 notification - how the calling app wishes to be notified
  1353.                 
  1354.     Outputs:    buffer - filled in with the bytes read
  1355.  
  1356.     Returns:    E_BSSuccess if successful
  1357.                 E_BSBadConnection if the connection ID has problems
  1358.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1359.                     the Store
  1360.                 E_BSMPIUnitNotResponding if the device does not respond
  1361.                 E_BSMPITransferError if some error was detected during the transfer
  1362.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1363.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1364.                     not be allocated
  1365.                 E_BSMPIMediaRemoved if the media was removed
  1366.  
  1367.  *****************************************************************************
  1368. }
  1369. FUNCTION BSStoreConnReadAsync(readConnection: BSStoreConnID; startingOffset: BSByteCount; bytesToRead: ByteCount; VAR notification: KernelNotification; buffer: UNIV Ptr): OSStatus; C;
  1370. {
  1371. ******************************************************************************
  1372.  
  1373.     BSStoreConnWriteAsync - writes data to the Store a Connection indicates.  
  1374.         This is the asynchronous version of the simple call, taking only a
  1375.         single range.
  1376.  
  1377.     Inputs:        writeConnection - the connection to the Store to be read from
  1378.                 srcMem - where the data is to be taken from
  1379.                 destBlocks - the blocks on the Store where the data is to be placed
  1380.                 notification - how the caller wishes to be notified
  1381.                 
  1382.     Outputs:    bytesWritten - the number of bytes written
  1383.                 (srcMem must remain a valid memory area until 
  1384.                 notification of completion is received)
  1385.  
  1386.     Returns:    E_BSSuccess if successful
  1387.             E_BSBadConnection if the connection ID has problems
  1388.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1389.                 the Store
  1390.             E_BSMPIUnitNotResponding if the device does not respond
  1391.             E_BSMPITransferError if some error was detected during the transfer
  1392.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1393.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1394.                 not be allocated
  1395.             E_BSMPIMediaRemoved if the media was removed
  1396.  
  1397.  *****************************************************************************
  1398. }
  1399. FUNCTION BSStoreConnWriteAsync(writeConnection: BSStoreConnID; startingOffset: BSByteCount; bytesToWrite: ByteCount; VAR notification: KernelNotification; buffer: UNIV Ptr): OSStatus; C;
  1400. {
  1401. ******************************************************************************
  1402.  
  1403.     BSStoreConnReadSGAsync - reads data from the Store indicated by the Connection.
  1404.         This is the asynchronous version of the scatter/gather  call.  
  1405.         The Block List is generated by the calls above, the Memory List calls 
  1406.         can be found in <MemoryLists.h>.
  1407.  
  1408.     Inputs:        readConnection - the connection to the Store to be read from
  1409.                 srcBlocks - a descriptor indicating the ranges on the device
  1410.                     to be read
  1411.                 destMemory - a Memory List descriptor indicating where the
  1412.                     data is to be placed
  1413.                 notification - how the caller wishes to be notified
  1414.                     
  1415.     Outputs:    <none>
  1416.  
  1417.     Returns:    E_BSSuccess if successful
  1418.                 E_BSBadConnection if the connection ID has problems
  1419.                 E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1420.                     the Store
  1421.                 E_BSMPIUnitNotResponding if the device does not respond
  1422.                 E_BSMPITransferError if some error was detected during the transfer
  1423.                 E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1424.                 E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1425.                     not be allocated
  1426.                 E_BSMPIMediaRemoved if the media was removed
  1427.  
  1428.  *****************************************************************************
  1429. }
  1430. FUNCTION BSStoreConnReadSGAsync(readConnection: BSStoreConnID; srcBlocks: BSBlockListDescriptorRef; destMemory: MemListDescriptorRef; VAR notification: KernelNotification): OSStatus; C;
  1431. {
  1432. ******************************************************************************
  1433.  
  1434.     BSStoreConnWriteSGAsync - writes data to the Store a Connection indicates. 
  1435.         This is the asynchronous version of the scatter/gather call.  The 
  1436.         Block List is generated by the calls above, the Memory List calls can
  1437.         be found in <MemoryLists.h>.
  1438.  
  1439.     Inputs:        writeConnection - the connection to the Store to be read from
  1440.                 srcMem - where the data is to be taken from
  1441.                     (the memory areas indicated by srcMem must remain valid until 
  1442.                     notification is received)
  1443.                 destBlocks - the blocks on the Store where the data is to be placed
  1444.                 notification - how the caller wishes to be notified of completion
  1445.                 
  1446.     Outputs:    <none>
  1447.                 
  1448.  
  1449.     Returns:    E_BSSuccess if successful
  1450.             E_BSBadConnection if the connection ID has problems
  1451.             E_BSMPIOutOfStoreBounds if the request exceeds the boundaries of 
  1452.                 the Store
  1453.             E_BSMPIUnitNotResponding if the device does not respond
  1454.             E_BSMPITransferError if some error was detected during the transfer
  1455.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1456.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1457.                 not be allocated
  1458.             E_BSMPIMediaRemoved if the media was removed
  1459.  
  1460.  *****************************************************************************
  1461. }
  1462. FUNCTION BSStoreConnWriteSGAsync(writeConnection: BSStoreConnID; srcMemory: MemListDescriptorRef; destBlocks: BSBlockListDescriptorRef; VAR notification: KernelNotification): OSStatus; C;
  1463. {
  1464. ******************************************************************************
  1465.  
  1466.     BSStoreConnFlush - Flushes caches for this Store and any Stores this Store
  1467.         is derived from.
  1468.  
  1469.     Inputs:        flushConnection - the connection to the Store to be flushed
  1470.  
  1471.     Outputs:    <none>
  1472.                 
  1473.  
  1474.     Returns:    E_BSSuccess if successful
  1475.             E_BSBadConnection if the connection ID has problems
  1476.             E_BSMPIUnitNotResponding if the device does not respond
  1477.             E_BSMPITransferError if some error was detected during the transfer
  1478.             E_BSMPIMemoryAccessFault if the destination memory was not accessible
  1479.             E_BSMPIOutOfResources if a necessary resource (usually memory) could
  1480.                 not be allocated
  1481.             E_BSMPIMediaRemoved if the media was removed
  1482.  
  1483.  *****************************************************************************
  1484. }
  1485. FUNCTION BSStoreConnFlush(flushConnection: BSStoreConnID): OSStatus; C;
  1486. {
  1487. ****************************************************************************
  1488.  *****************************************************************************
  1489.  
  1490.     Block Storage Accessibility Operations
  1491.     
  1492.  *****************************************************************************
  1493.  ***************************************************************************
  1494. }
  1495. {
  1496. ******************************************************************************
  1497.  
  1498.     BSStoreConnGoToAccessibilityState - requests that a Store change its
  1499.         accessibility state to the one desired
  1500.  
  1501.     Inputs:        connection - connection to the Store to change state
  1502.                 newState - the desired state
  1503.  
  1504.     Outputs:    <none>
  1505.  
  1506.     Returns:    E_BSSuccess if successful
  1507.  
  1508.  *****************************************************************************
  1509. }
  1510. FUNCTION BSStoreConnGoToAccessibilityState(connection: BSStoreConnID; newState: BSAccessibilityState): OSStatus; C;
  1511. {
  1512. ******************************************************************************
  1513.  
  1514.     BSContainerConnGoToAccessibilityState - requests that a Container change 
  1515.         its accessibility state to the one desired
  1516.  
  1517.     Inputs:        connection - connection to the Container to change state
  1518.                 newState - the desired state
  1519.  
  1520.     Outputs:    <none>
  1521.  
  1522.     Returns:    E_BSSuccess if successful
  1523.  
  1524.  *****************************************************************************
  1525. }
  1526. FUNCTION BSContainerConnGoToAccessibilityState(connection: BSContainerConnID; newState: BSAccessibilityState): OSStatus; C;
  1527. {
  1528. ****************************************************************************
  1529.  *****************************************************************************
  1530.  
  1531.     Block Storage Configuration
  1532.     
  1533.  *****************************************************************************
  1534.  ***************************************************************************
  1535. }
  1536. {
  1537. ******************************************************************************
  1538.  
  1539.     BSStoreConnGetInfo - gets information about the Store a Connection indicates
  1540.  
  1541.     Inputs:        infoConnection - the connection to the Store we want info about
  1542.  
  1543.     Outputs:    infoBuffer - the information about the Store
  1544.  
  1545.     Returns:    E_BSSuccess if successful
  1546.                 E_BSBadConnection if the connection ID has problems
  1547.  
  1548.  *****************************************************************************
  1549. }
  1550. FUNCTION BSStoreConnGetInfo(infoConnection: BSStoreConnID; VAR infoBuffer: BSStoreInfo): OSStatus; C;
  1551. {
  1552. ******************************************************************************
  1553.  
  1554.     BSStoreCreate - creates a new Store.  The Store is not added into the Block 
  1555.                     Storage Name Store hierarchy.
  1556.  
  1557.     Inputs:        <none>
  1558.  
  1559.     Outputs:    newStore - the ID of the new Store 
  1560.                 newStoreConnection    - a connection to the created Store
  1561.  
  1562.     Returns:    E_BSSuccess on success
  1563.                 E_BSENoMoreStores if no more Stores can be allocated
  1564.                 E_BSOutOfResources if other resources cannot be allocated
  1565.  
  1566.  *****************************************************************************
  1567. }
  1568. FUNCTION BSStoreCreate(VAR newStore: BSStoreID; VAR newStoreConnection: BSStoreConnID): OSStatus; C;
  1569. {
  1570. ******************************************************************************
  1571.  
  1572.     BSStoreConnDeleteAndClose - deletes the Store the current connection 
  1573.         references and closes the connection
  1574.  
  1575.     Inputs:        connection - the connection to the Store to be deleted
  1576.  
  1577.     Outputs:    <none>
  1578.     Returns:    E_BSSuccess on success
  1579.                 E_BSStoreInUse if other connections are open to the Store
  1580.  
  1581.  *****************************************************************************
  1582. }
  1583. FUNCTION BSStoreConnDeleteAndClose(connection: BSStoreConnID): OSStatus; C;
  1584. {
  1585. ******************************************************************************
  1586.  
  1587.     BSStoreConnSetPartitionInfo - Sets data in a partition map entry on a Store
  1588.  
  1589.     Inputs:        storeConnection - the connection to the Store
  1590.                 partitionNum - the partition map entry to be set
  1591.                 partitionInfo - a pointer to the new partition map entry info
  1592.  
  1593.     Returns:    E_BSSuccess if successful
  1594.                 E_BSBadConnection if the connection ID has problems
  1595.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1596.                 E_BSPPIOverlappingPartition if the requested partition overlaps
  1597.                     another
  1598.                 E_BSPPIOutOfStoreBounds if the request partition exceeds the limits
  1599.                     of the Store
  1600.  
  1601.  *****************************************************************************
  1602. }
  1603. FUNCTION BSStoreConnSetPartitionInfo(storeConnection: BSStoreConnID; partitionNum: ItemCount; VAR partitionInfo: BSPartitionDescriptor): OSStatus; C;
  1604. {
  1605. ******************************************************************************
  1606.  
  1607.     BSStoreConnSetPartitionInfo - Gets data in a partition map entry on a Store
  1608.  
  1609.     Inputs:        storeConnection - the connection to the Store
  1610.                 partitionNum - the partition map entry to be retrieved
  1611.                 partitionInfo - a pointer to the partition map entry info buffer
  1612.  
  1613.     Returns:    E_BSSuccess if successful
  1614.                 E_BSBadConnection if the connection ID has problems
  1615.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1616.  
  1617.  *****************************************************************************
  1618. }
  1619. FUNCTION BSStoreConnGetPartitionInfo(connection: BSStoreConnID; partitionNum: ItemCount; VAR partitionInfo: BSPartitionDescriptor): OSStatus; C;
  1620. {
  1621. ******************************************************************************
  1622.  
  1623.     BSStoreConnMapPartition - Maps a partition from a Store onto another Store
  1624.  
  1625.     Inputs:        srcConnection - the connection to the source Store
  1626.                 partitionNum - the partition to be mapped
  1627.                 destConnection - the connection to the destination Store
  1628.                 destStartingBlock - where in the destination Store the mapped 
  1629.                     partition should be placed
  1630.  
  1631.     Returns:    E_BSSuccess if successful
  1632.                 E_BSBadConnection if the connection ID has problems
  1633.                 E_BSPPINoPlugIn if the Store does not have a Partitioning Plug-in
  1634.                 E_BSPPIMappingNotSupported if the mapping is not supported by either
  1635.                     Store
  1636.                 E_BSPPIPartitionNonExistant if the source partition doesn't exist
  1637.                  E_BSEHierarchyTooDeep if this would create too many layers in the
  1638.                     hierarchy (currently limited to 8)
  1639. *****************************************************************************
  1640. }
  1641. FUNCTION BSStoreConnMapPartition(srcConnection: BSStoreConnID; partitionNum: ItemCount; destConnection: BSStoreConnID; startingByte: BSByteCount): OSStatus; C;
  1642. {
  1643. ******************************************************************************
  1644.  
  1645.     BSStoreConnGetComponents - Gets the components of a Store.
  1646.  
  1647.     Inputs:        connection - the connection to the Store
  1648.                 tableSize - size of the table to be filled in
  1649.                 componentInfo - a pointer to an array of BSStoreComponentInfos 
  1650.                     to be filled in
  1651.  
  1652.     Returns:    E_BSSuccess if successful
  1653.             E_BSBadConnection if the connection ID has problems
  1654.  *****************************************************************************
  1655. }
  1656. FUNCTION BSStoreConnGetComponents(connection: BSStoreConnID; tableSize: ItemCount; VAR componentInfo: BSStoreComponent): OSStatus; C;
  1657. {
  1658. ******************************************************************************
  1659.  
  1660.     BSStoreConnMapDevice - Maps an entire device into a Store
  1661.  
  1662.     Inputs:        srcDevice - the Name Registry ID of the device
  1663.                 destConnection - the connection to the destination Store
  1664.  
  1665.     Returns:    E_BSSuccess if successful
  1666.                 E_BSBadConnection if the connection ID has problems
  1667.  *****************************************************************************
  1668. }
  1669. FUNCTION BSStoreConnMapDevice(srcDevice: RegEntryRef; destConnection: BSStoreConnID): OSStatus; C;
  1670. {
  1671. ******************************************************************************
  1672.  
  1673.     BSStoreConnAssociateMappingPlugin - Attaches a Mapping Plug-in to a Store
  1674.  
  1675.     Inputs:        connection - the connection to the Store
  1676.                 mappingPlugin - the identifier of the Plugin to be attached
  1677.     Returns:    E_BSSuccess if successful
  1678.                 E_BSBadConnection if the connection ID has problems
  1679.                 E_BSEPlugInNotFound if the plugin specified can't be found
  1680.  *****************************************************************************
  1681. }
  1682. FUNCTION BSStoreConnAssociateMappingPlugin(connection: BSStoreConnID; mappingPlugin: BSMappingPlugInRef): OSStatus; C;
  1683. {
  1684. ******************************************************************************
  1685.  
  1686.     BSStoreConnAssociatePartitioningPlugin - Attaches a Partitioning Plug-in to 
  1687.         a Store
  1688.  
  1689.     Inputs:        connection - the connection to the Store
  1690.                 mappingPlugin - the identifier of the Plugin to be attached
  1691.     Returns:    E_BSSuccess if successful
  1692.                 E_BSBadConnection if the connection ID has problems
  1693.                 E_BSEPlugInNotFound if the plugin specified can't be found
  1694.  *****************************************************************************
  1695. }
  1696. FUNCTION BSStoreConnAssociatePartitioningPlugin(connection: BSStoreConnID; mappingPlugin: BSPartitioningPlugInRef): OSStatus; C;
  1697. {
  1698. ******************************************************************************
  1699.  
  1700.     BSStoreConnPublish - makes a Store available for general use
  1701.  
  1702.     Inputs:        connection - the connection to the Store
  1703.     Returns:    E_BSSuccess if successful
  1704.                 E_BSBadConnection if the connection ID has problems
  1705.  *****************************************************************************
  1706. }
  1707. FUNCTION BSStoreConnPublish(connection: BSStoreConnID): OSStatus; C;
  1708. {
  1709. ******************************************************************************
  1710.  
  1711.     BSStoreConnUnpublish - removes a Store from general use
  1712.  
  1713.     Inputs:        connection - the connection to the Store
  1714.     Returns:    E_BSSuccess if successful
  1715.                 E_BSBadConnection if the connection ID has problems
  1716.  *****************************************************************************
  1717. }
  1718. FUNCTION BSStoreConnUnpublish(connection: BSStoreConnID): OSStatus; C;
  1719. {
  1720. ******************************************************************************
  1721.  
  1722.     BSStoreConnFormat - formats a Store in the specified format
  1723.  
  1724.     Inputs:        connection - the connection to the Store
  1725.                 formatType - the format number from possibleFormats in the
  1726.                     BSStoreInfo structure
  1727.                     
  1728.     Returns:    E_BSSuccess if successful
  1729.                 E_BSBadConnection if the connection ID has problems
  1730.  *****************************************************************************
  1731. }
  1732. FUNCTION BSStoreConnFormat(connection: BSStoreConnID; formatType: BSFormatIndex): OSStatus; C;
  1733. {
  1734. ******************************************************************************
  1735.  
  1736.     BSContainerConnGetInfo - gets information about the Container  a Connection indicates
  1737.  
  1738.     Inputs:        infoConnection - the connection to the Container we want info about
  1739.  
  1740.     Outputs:    infoBuffer - the information about the Container
  1741.  
  1742.     Returns:    E_BSSuccess if successful
  1743.                 E_BSBadConnection if the connection ID has problems
  1744.  
  1745.  *****************************************************************************
  1746. }
  1747. FUNCTION BSContainerConnGetInfo(infoConnection: BSContainerConnID; VAR infoBuffer: BSContainerInfo): OSStatus; C;
  1748. {
  1749. ******************************************************************************
  1750.  
  1751.     BSContainerCreate - Creates a new Container.  The Container is not added 
  1752.         into the Block Storage Container Hierarchy
  1753.  
  1754.     Inputs:        <none>
  1755.  
  1756.     Outputs:    newContainer - a connection to the newly created Container
  1757.  
  1758.     Returns:    E_BSSuccess if successful
  1759.  
  1760.  *****************************************************************************
  1761. }
  1762. FUNCTION BSContainerCreate(VAR newContainer: BSContainerConnID): OSStatus; C;
  1763. {
  1764. ******************************************************************************
  1765.  
  1766.     BSContainerConnDeleteAndClose - deletes the Container and closes the 
  1767.         connection to it.  No other connections to the Container may be open.
  1768.  
  1769.     Inputs:        deleteContainer - connection to the Container to be deleted    
  1770.  
  1771.     Outputs:    <none>
  1772.  
  1773.     Returns:    E_BSSuccess if successful
  1774.  
  1775.  *****************************************************************************
  1776. }
  1777. FUNCTION BSContainerConnDeleteAndClose(deleteContainer: BSContainerConnID): OSStatus; C;
  1778. {
  1779. ******************************************************************************
  1780.  
  1781.     BSContainerConnInsertContainer - inserts a Container into another Container
  1782.  
  1783.     Inputs:        destContainer - a connection to the Container to insert into
  1784.                 insertContainer - connection to the Container to be inserted
  1785.  
  1786.     Outputs:    <none>
  1787.  
  1788.     Returns:    E_BSSuccess if successful
  1789.  
  1790.  *****************************************************************************
  1791. }
  1792. FUNCTION BSContainerConnInsertContainer(destContainer: BSContainerConnID; putContainer: BSContainerConnID): OSStatus; C;
  1793. {
  1794. ******************************************************************************
  1795.  
  1796.     BSContainerConnPublish - makes a Container available for use.  Generates
  1797.         notifications as necessary
  1798.  
  1799.     Inputs:        publishContainer - connection to the Container to be published
  1800.  
  1801.     Outputs:    <none>
  1802.  
  1803.     Returns:    E_BSSuccess if successful
  1804.  
  1805.  *****************************************************************************
  1806. }
  1807. FUNCTION BSContainerConnPublish(publishContainer: BSContainerConnID): OSStatus; C;
  1808. {
  1809. ******************************************************************************
  1810.  
  1811.     BSContainerConnUnpublish - removes a Container from general accessibility,
  1812.         does not delete it.  The Container must not have any open connections or
  1813.         published children.
  1814.  
  1815.     Inputs:        unpublishContainer - the Container to unpublish
  1816.  
  1817.     Outputs:    <none>
  1818.  
  1819.     Returns:    E_BSSuccess if successful
  1820.  
  1821.  *****************************************************************************
  1822. }
  1823. FUNCTION BSContainerConnUnpublish(unpublishContainer: BSContainerConnID): OSStatus; C;
  1824. {
  1825. ******************************************************************************
  1826.  
  1827.     BSContainerConnSetDevice - sets the device the Container plug-in will 
  1828.         associate with.  Should be called before BSContainerConnAssociatePlugIn
  1829.         for bare Containers.
  1830.  
  1831.     Inputs:        connection - a connection to the Container we're associating
  1832.                     the plug-in with
  1833.                 deviceNode - the device the Container plug-in will interact with
  1834.  
  1835.     Outputs:    <none>
  1836.  
  1837.     Returns:    E_BSSuccess if successful
  1838.  
  1839.  *****************************************************************************
  1840. }
  1841. FUNCTION BSContainerConnSetDevice(connection: BSContainerConnID; deviceNode: RegEntryRef): OSStatus; C;
  1842. {
  1843. ******************************************************************************
  1844.  
  1845.     BSContainerConnAssociatePlugIn - Associates a Container plug-in with a
  1846.         Container
  1847.  
  1848.     Inputs:        connection - a connection to the Container we're associating
  1849.                     the plug-in with
  1850.                 plugIn - the new plug in to be associated
  1851.  
  1852.     Outputs:    <none>
  1853.  
  1854.     Returns:    E_BSSuccess if successful
  1855.  
  1856.  *****************************************************************************
  1857. }
  1858. FUNCTION BSContainerConnAssociatePlugIn(connection: BSContainerConnID; plugIn: BSContainerPlugInRef): OSStatus; C;
  1859. {$ENDC}
  1860. {$ALIGN RESET}
  1861. {$POP}
  1862.  
  1863. {$SETC UsingIncludes := BlockStorageIncludes}
  1864.  
  1865. {$ENDC} {__BLOCKSTORAGE__}
  1866.  
  1867. {$IFC NOT UsingIncludes}
  1868.  END.
  1869. {$ENDC}
  1870.